<?php

namespace Transaccion\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Transaccion\Model\Entity\DatosIngreso;
use Transaccion\Controller\Service\GenericService;
use Transaccion\Model\Dao\DatosIngresoDAO;
use Transaccion\Controller\Service\IngresoMallaService;

//SERVICIO
class DatosIngresoService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $datosIngresoService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$datosIngresoService == null) {
            self::$datosIngresoService = new DatosIngresoService($adapter);
        }
        return self::$datosIngresoService;
    }

    public function getDatosIngresoDao() {
        return DatosIngresoDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getRegistro($id) {
        $data = null;
        $success = false;
        $datosIngreso = $this->obtenerDatosIngresoSegunId($id);
        if ($datosIngreso->getId() != null) {
            $data[0] = $datosIngreso->objectToArray();
            $success = true;
        }
        return UtilsArrayController::organizarOutput($success, $data, null);
    }/*
    
    public function getRegistroCompleto($id) {
        $datosIngreso = $this->obtenerDatosIngresoSegunId($id);
        return $this->armarRegistroCompleto($datosIngreso);
    }*/
      
    public function getRegistroCompletoSegunPersona($id) {
        $registros = $this->obtenerDatosIngresoSegunCedula($id);
        if (count($registros) > 0) {
            $success = true;
            $mensaje = 'DATOS DE INGRESOS ENCONTRADOS';
            $datosIngreso = $this->llenarArreglo($registros);
        }
        $output = array(
            'success' => $success,
            'data' => $datosIngreso,
            'total' => count($datosIngreso),
            'mensaje' => $mensaje
        );
        return $output;
    }
    
    public function getRegistroCompleto($id) {
        $datosIngreso = $this->obtenerDatosIngresoSegunId($id);
        return $this->armarRegistroCompleto($datosIngreso);
    }
    
    public function armarRegistroCompleto($datosIngreso) {
        $mensaje = 'Ingreso Malla no encontrado';
        $data = null;
        $success = false;
        $servicioIngresoMalla = IngresoMallaService::getInstance($this->dbAdapter);
        $ingresoMalla = $servicioIngresoMalla->getRegistroCompletoSegunDatoIngreso($datosIngreso->getId());
        if ($datosIngreso->getId() != null) {
            $data[0] = $datosIngreso->objectToArray();
            $success = true;
            $data[0]['_id'] = $ingresoMalla['data'];
            //$data[0]['_datosIngreso'] = $datosAcademicos['data'];
            
            $mensaje = 'Materia ENCONTRADA';
        }
        $output = array(
            'success' => $success,
            'data' => $data,    
            'total' => count($data),
            'mensaje' => $mensaje
        );
        return $output;
    }
    
    public function llenarArreglo($registros) {
                foreach ($registros as $row) {
            $datosIngresos[] = array(
                'id' => $row['id'],
            );
        }
        for ($i = 0; $i < count($datosIngresos); $i++) {
            $datoIngreso = $this->getRegistroCompleto($datosIngresos[$i]['id']);
            $datosIngresos[$i] = $datoIngreso['data'];
        }
        return  $datosIngresos;
    }

//------Retornan los objetos-------

    /**
     * Dado el id del datosIngreso se trae el registro asociado
     * convirtiendolo primero en objeto y luego lo retorna
     * @param $id type string
     * @return Objeto DatosIngreso
     */
    public function obtenerDatosIngresoSegunId($id) {
        $registros = $this->getDatosIngresoDao()->getRegistro($id);
        $data = UtilsArrayController::llenarData($registros);
        $datosIngreso = new DatosIngreso($data[0]);
        return $datosIngreso;
    }
    
    public function obtenerDatosIngresoSegunCedula($id) {
        $registros = $this->getDatosIngresoDao()->getRegistroSegunCedula($id);
        return $registros;
    }

//-----------------------------------
}
